#define _CRT_SECURE_NO_WARNINGS 1

//#include<stdio.h>
//int main()
//{
//	int a[12] = { 1,2,3,4,5,6,7,8,9,10,11,12 }, * p[4], i;
//	for (i = 0; i < 4; i++)
//		p[i] = &a[i * 3];
//	printf("%d\n",p[3][2]);
//	return 0;
//}

// int* productExceptSelf(int* nums, int numsSize, int* returnSize)
// {
//       int* anr=(int*)malloc(numsSize*sizeof(int));
//       int i=0,count=1;
//       int* left=(int*)malloc(numsSize*sizeof(int));
//       int* right=(int*)malloc(numsSize*sizeof(int));
//       for(i=0;i<numsSize;i++)
//       {
//           left[i]=count;
//           count=count*nums[i];
//       }
//       count=1;
//       for(i=numsSize-1;i>=0;i--)
//       {
//           right[i]=count;
//           count=count*nums[i];
//       }
//       for(i=0;i<numsSize;i++)
//       {
//           anr[i]=left[i]*right[i];
//       }
//       *returnSize = numsSize;
//       return anr;

// }

int* productExceptSelf(int* nums, int numsSize, int* returnSize)
{
    int* anr = (int*)malloc(numsSize * sizeof(int));
    int i = 0, count = 1;

    int* right = (int*)malloc(numsSize * sizeof(int));
    for (i = 0; i < numsSize; i++)
    {
        anr[i] = count;
        count = count * nums[i];
    }
    count = 1;
    for (i = numsSize - 1; i >= 0; i--)
    {
        anr[i] = anr[i] * count;
        count = count * nums[i];
    }

    *returnSize = numsSize;
    return anr;

}